package br.com.controller.escola;

import java.util.ArrayList;
import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;

import br.com.arquitetura.controlador.AbstractMBean;
import br.com.arquitetura.excecoes.BDException;
import br.com.arquitetura.servico.ServiceCadastro;
import br.com.data.hibernate.EscolaHibernateDAO;
import br.com.model.entidade.Escola;

@ManagedBean
@ViewScoped
public class MBEscola extends AbstractMBean<Escola>{
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private Escola escola;
	private Escola escolaVisualizacao;
	private List<Escola> escolas;
	private EscolaHibernateDAO escolaHibernateDAO;
	
	@ManagedProperty(value="#{serviceCadastro}")
	private ServiceCadastro serviceCadastro;
	
	public void setServiceCadastro(ServiceCadastro serviceCadastro) {
		this.serviceCadastro = serviceCadastro;
	}
	
	
	
	public Escola getEscolaVisualizacao() {
		return escolaVisualizacao;
	}



	public void setEscolaVisualizacao(Escola escolaVisualizacao) {
		this.escolaVisualizacao = escolaVisualizacao;
	}



	public MBEscola(){
		this.escolaHibernateDAO = (EscolaHibernateDAO) getBean("escolaHibernateDAO");
		this.limpar();
	}
	
	public void cadastrar(){
		try {
			this.serviceCadastro.salvar(escola);
			this.limpar();
			FacesContext.getCurrentInstance().addMessage(null,new FacesMessage("Sucesso", "Escola cadastrada com sucesso!"));
		} catch (BDException e) {
			// TODO Auto-generated catch block
			FacesContext.getCurrentInstance().addMessage(null,new FacesMessage("Erro", "Erro ao cadastrar!"));
			e.printStackTrace();
		}
	}
	
	public void editar(){
		try {
			this.serviceCadastro.atualizar(escola);
			this.limpar();
			FacesContext.getCurrentInstance().addMessage(null,new FacesMessage("Sucesso", "Escola editada com sucesso!"));
		} catch (BDException e) {
			// TODO Auto-generated catch block
			FacesContext.getCurrentInstance().addMessage(null,new FacesMessage("Erro", "Erro ao editar!"));
			e.printStackTrace();
		}
	}
	
	public void excluir(){
		try {
			this.serviceCadastro.excluir(escola);
			this.limpar();
			FacesContext.getCurrentInstance().addMessage(null,new FacesMessage("Sucesso", "Escola excluida com sucesso!"));
		} catch (BDException e) {
			// TODO Auto-generated catch block
			FacesContext.getCurrentInstance().addMessage(null,new FacesMessage("Erro", "Erro ao excluir!"));
			e.printStackTrace();
		}
	}

	
	public void limpar(){
		this.escola = new Escola();
		try {
			this.escolas = this.escolaHibernateDAO.listAll(Escola.class);
		} catch (BDException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	public Escola getEscola() {
		return escola;
	}

	public void setEscola(Escola escola) {
		this.escola = escola;
	}

	public List<Escola> getEscolas() {
		
		return escolas;
	}

	public void setEscolas(List<Escola> escolas) {
		this.escolas = escolas;
	}
	
	public List<String> complete(String query) { 
		try {
			this.escolas = this.escolaHibernateDAO.listAll(Escola.class);
		} catch (BDException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
        List<String> results = new ArrayList<String>();  
        
        if (query.isEmpty()){
        	for (Escola aux : this.getEscolas()){
        		results.add(aux.getNome());
        	}
        }else{
        	for (Escola aux : this.getEscolas()){
        		if (aux.getNome().toLowerCase().contains(query.toLowerCase())){
        			results.add(aux.getNome());
        		}
        	}
        }
          
        return results;  
    } 
	
}
